package com.icekrvams.air.firebase

import androidx.annotation.XmlRes
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.FirebaseRemoteConfigSettings
import com.icekrvams.air.remoteConfig

object RemoteConfigHelper {

    private const val MINIMUM_FETCH_INTERVAL_IN_SECONDS = 3600L

    internal fun initialize() {
        // 设置最小取值间隔。
        setMinimumFetchIntervalInSeconds(MINIMUM_FETCH_INTERVAL_IN_SECONDS)
        // 应用启动时进行一次远程配置的获取和激活。
        remoteConfig.fetchAndActivate()
    }

    /**
     * 设置Firebase Remote Config取值最小间隔时间。
     * @param timeInSeconds 间隔时间（单位秒），如不设置则取默认值，[MINIMUM_FETCH_INTERVAL_IN_SECONDS]。
     */
    fun setMinimumFetchIntervalInSeconds(timeInSeconds: Long) {
        remoteConfig.setConfigSettingsAsync(
            FirebaseRemoteConfigSettings.Builder()
                .setMinimumFetchIntervalInSeconds(timeInSeconds)
                .build()
        )
    }

    /**
     * 获取RemoteConfig单例。
     */
    fun get(): FirebaseRemoteConfig = remoteConfig

    /**
     * 设置默认值。
     */
    fun setDefaultsAsync(@XmlRes resourceId: Int) =
        remoteConfig.setDefaultsAsync(resourceId)

    // 从RemoteConfig实例中获取数据 Start。
    fun getBoolean(key: String) = remoteConfig
        .getBoolean(key)

    fun getString(key: String) = remoteConfig
        .getString(key)

    fun getDouble(key: String) = remoteConfig
        .getDouble(key)

    fun getLong(key: String) = remoteConfig
        .getLong(key)
    // 从RemoteConfig实例中获取数据 End。

    // 处理远程配置的获取和激活 Start。
    fun fetch() = remoteConfig.fetch()

    fun active() = remoteConfig.activate()

    fun fetchAndActivate() = remoteConfig.fetchAndActivate()
    // 处理远程配置的获取和激活 End。
}